<?php

namespace App\Http\Controllers\Site;

use App\Models\Category;
use App\Models\Goods;
use App\Models\Product;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PageController extends Controller
{
    //网站前台首页方法
    public function index()
    {
//        dd(Category::find(1)->getCategoryGoods()->random(2));
//        $topCategorys = Category::where('parent_id', 0)->select('id','title','icon')->get();
        if (!\Cache::has('topCategorys')){
        \Cache::put('topCategorys',Category::where('parent_id', 0)->select('id','title','icon')->get(),15);
        }
        $topCategorys = \Cache::get('topCategorys');
        return view('site.index', compact('topCategorys'));
    }

    //列表方法
    public function lists(Category $category)
    {
        $order_by = \request('order_by');
        //展示当前分类下的所有商品
        $goods = $category->getCategoryGoods($order_by);
        //获取当前栏目的所有父级栏目信息
        $fatherCategory = $category->getFatherCategory();
//        dd($fatherCategory);
        return view('site.lists', compact('goods', 'fatherCategory'));
    }

    //详情页方法
    public function detail(Goods $goods, Product $product = null)
    {
        //获取当前商品的所有信息,包括商品对应货品信息
        $goodsInfo = $goods->getInfo();
//        dd($goodsInfo);
        //第一次跳转到商品详情页的时候默认展示第一个货品的信息,后续点击某一个货品信息就展示那个货品的详细信息
        //判断$product是否为真,如果为真就返回$product自己否则就返回当前商品对应的第一条货品信息(可以简写?:形式)
        //这里之所以要传递一个$product产品对象到前台渲染页面中,就是为了进入商品详情页的时候默认选中一个货品信息并展示该货品的一些信息例如库存等
        $product = $product ?: $goodsInfo['products']->first();
//        dd([$product,$goodsInfo]);
        return view('site.detail', compact('goodsInfo', 'product'));
    }

    //搜索页方法
    public function search(Request $request)
    {
//        dd($request->all());
        $flag = 1;
        //先获取前台用户输入的要搜索的内容
        $search = $request['search_condition'];
        $search_result = Goods::search($search)->get();
//        如果用户输入的内容搜索到的结果为空就执行if判断体
        if ($search_result->isEmpty()) {
            //如果搜索结果为空就从商品表中随机返回5件商品,并改变前面用来标记是否搜到内容的$flag的值
            $search_result = Goods::all()->random(5);
            $flag = 0;
        }
        //从当前商品信息中搜title名类似的商品信息,Goods类中已经引入了Searchable这个trait
        $search_result = $search_result->map(function ($value) {
            return $value->only('id', 'price', 'pics', 'title');
        });
        //把用户输入的搜索内容也渲染到页面中,这样用户就知道自己搜的是啥东西了
        //搜索完成后渲染搜索结果就可以了,不需要在给用户一个弹窗
        //但是这里需要做一个判断
        if ($flag) {
            return view('site.search', ['goods' => $search_result, 'search_condition' => $search]);
        } else {
            \Cookie::queue('name','dao',0.05);
            session()->flash('flag','flagvalue');
//            渲染模板时候使用with携带的内容将会被闪存到渲染模板的seeeion中
            return view('site.search', ['goods' => $search_result, 'search_condition' => $search]);
        }
    }
}

